/**
 * 
 */
package org.lookouster.nextAgadir.pointageBureau.bases;

import java.sql.SQLException;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.List;

import org.lookouster.nextAgadir.pointageBureau.dbDESC.EMP_TPS;
import org.lookouster.nextAgadir.pointageBureau.dbDESC.Tables;
import org.lookouster.nextAgadir.pointageBureau.outils.BDConnect;
import org.lookouster.nextAgadir.pointageBureau.outils.BDFunctions;
import org.lookouster.nextAgadir.pointageBureau.outils.functions;

/**
 * @author Lookouster
 *
 */
public class EmploiTemps {

	/**
 *
 */
private int idEmploiTemps; 
private Date debutEmploiTemps, finEmploiTemps;
private Map<EspaceTravail, List<Ouvrier>> emploiDB;

/**
 * 
 */
public EmploiTemps() {
	emploiDB=new HashMap<EspaceTravail,List<Ouvrier>>();
}
public EmploiTemps(Date debut, Date fin)
{
	this.debutEmploiTemps=debut;
	this.finEmploiTemps=fin;
	emploiDB=new HashMap<EspaceTravail,List<Ouvrier>>();
}
/**
 * @return the idEmploiTemps
 */
public int getIdEmploiTemps() {
	return idEmploiTemps;
}

/**
 * @param idEmploiTemps the idEmploiTemps to set
 */
public void setIdEmploiTemps(int idEmploiTemps) {
	this.idEmploiTemps = idEmploiTemps;
}

/**
 * @return the debutEmploiTemps
 */
public Date getDebutEmploiTemps() {
	return debutEmploiTemps;
}

/**
 * @param debutEmploiTemps the debutEmploiTemps to set
 */
public void setDebutEmploiTemps(Date debutEmploiTemps) {
	this.debutEmploiTemps = debutEmploiTemps;
}

/**
 * @return the finEmploiTemps
 */
public Date getFinEmploiTemps() {
	return finEmploiTemps;
}

/**
 * @param finEmploiTemps the finEmploiTemps to set
 */
public void setFinEmploiTemps(Date finEmploiTemps) {
	this.finEmploiTemps = finEmploiTemps;
}
/**
 * @return the emploiDB
 */
public Map<EspaceTravail, List<Ouvrier>> getEmploiDB() {
	return emploiDB;
}
/**
 * @param emploiDB the emploiDB to set
 */
public void setEmploiDB(Map<EspaceTravail, List<Ouvrier>> emploiDB) {
	this.emploiDB = emploiDB;
}


/**
 * Add the champ to those concerned by the planning. A team works on a champ
 * @param EspaceTravail e
 * @param membres members of the team
 */
public void addTeam(EspaceTravail e, List<Ouvrier> membres)
{
	emploiDB.put(e, membres);
}


/**
 * Remove the team related to the champ from the planning
 * @param e
 */
public void removeTeam(EspaceTravail e)
{
	emploiDB.keySet().remove(e);
}


/**
 * 
 * @param e champ whose team should be added the indicate ouvrier o
 * @param o concerned ouvrier
 */
public void addOuvrier(EspaceTravail e, Ouvrier o)
{
	emploiDB.get(e).add(o);
}

/**
 * 
 * @param e
 * @param o
 */
public void removeOuvrier(EspaceTravail e, Ouvrier o)
{
	emploiDB.get(e).remove(o);
}

/**
 * indicates whether the specified champ, is already taken in account in the planning
 * by a reference to himself or one of his ancestors
 * @param e
 */
public boolean containsChildren(EspaceTravail esp)
{
	return false;
}


/**
 * Save the planning object to the DB 
 */
public void saveDB()
{
	String sql="insert into "+Tables.DB_TABLE_EMP_TPS+" ("+EMP_TPS.CHP_DATE_DEB+", "
	+EMP_TPS.CHP_DATE_FIN+") values ('"+debutEmploiTemps+"', '"+finEmploiTemps+"')";
	//System.out.println(sql);
	BDConnect bdc;
	try {
		bdc = new BDConnect();
		bdc.update(sql);
		idEmploiTemps=BDFunctions.getLastID(Tables.DB_TABLE_EMP_TPS,
				EMP_TPS.CHP_ID, bdc);
		for(EspaceTravail esp:emploiDB.keySet())
		{
			for(Ouvrier o:emploiDB.get(esp))
			{
				saveEmploiItem(esp.getIdEspaceTravail(), o.getIdEmploye(), bdc);
			}
		}
		bdc.shutdown();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		//e.printStackTrace();
		functions.affiche("pb saving planning info"+e.getMessage());
	}
	
	
}


/**
 * Insert new row into emploi_ouvrier_espace table
 * @param idEsp
 * @param idOuvrier
 * @param bdc
 */
public void saveEmploiItem(int idEsp, int idOuvrier,BDConnect bdc)
{
	String sql="insert into "+Tables.DB_TABLE_EMP_ESP_OUV+" values("+
	idEmploiTemps+", "+idOuvrier+", "+idEsp+")";
	//functions.affiche(sql);
	try {
		bdc.update(sql);
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		//e.printStackTrace();
		functions.affiche("save emploiItem failed"+e.getMessage());
	}
}

}